package org.example;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Properties;

/**
 * 读取jar包内的配置文件
 * 还可以定位到当前类所在的jar包位置
 * jar:file:/F:/mylib/asmTest.jar!/conf/my.properties
 * <p>
 * classLoader.getResource("");
 * 在解压缩文件夹运行,得到classpath的根路径.如:
 * file:/E:/Workspaces/intellijidea2024/dynamicProxy/jarProperties/target/classes/
 * <p>
 * 在jar包运行,得到的是null.
 * <p>
 * 但是classLoader.getResource("org/example/AppJarProperties.class");
 * //class为当前类在jar包中的路径名
 * jar包执行时,可以得到如下的值:
 * jar:file:/F:/mylib/asmTest.jar!/org/example/AppJarProperties.class
 * 在解压缩文件夹运行,得到如下的值
 * file:/E:/Workspaces/intellijidea2024/dynamicProxy/jarProperties/target/classes/org/example/AppJarProperties.class
 *
 */
public class AppJarProperties {
    public static void main(String[] args) throws Exception {
        System.out.println("AppJarProperties main is running...");

        Properties properties = new Properties();
        InputStream inputStream = AppJarProperties.class.getClassLoader().getResourceAsStream("conf/my.properties");
        // 当前类的class文件
        URL url = AppJarProperties.class.getClassLoader().getResource("org/example/AppJarProperties.class");
        System.out.println("AppJarProperties.class的路径:"+url);

        URL resource1 = AppJarProperties.class.getClassLoader().getResource("");
        //jar包执行时,得到的是null.
        //在解压缩文件夹运行,得到classpath的根路径
        System.out.println("classLoader.getResource(\"\"):"+resource1);


        URL resource = AppJarProperties.class.getClassLoader().getResource("conf/my.properties");
        System.out.println("conf/my.properties的路径是:"+resource);

        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
        properties.load(inputStreamReader);

        String name = properties.getProperty("name");
        System.out.println("conf/my.properties文件中name的值是:"+name);
    }
}
